#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
# @version: v1.0
# @author : cd
# @Email : 19688513@qq.com
# @Project : new-horizons-engine
# @File : email_report_generator.py.py
# @Software: PyCharm
# @time: 2025/6/4 11:59
# @description : 
"""

import urllib3
import logging


from jinja2 import Template

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 禁用不安全的请求警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)




class EmailReportGenerator:
    def __init__(self):
        self.daily_recommendation_template_str = """
                <!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <meta name="viewport" content="width=device-width, initial-scale=1.0">
                    <title>每日推荐</title>
                    <style>
                        body {
                            font-family: Arial, sans-serif;
                            margin: 20px;
                            line-height: 1.6;
                            color: #333; /* 设置页面文字颜色 */
                        }
                        h1 {
                            color: #007BFF; /* 标题颜色 */
                            text-align: center; /* 标题居中显示 */
                            margin-bottom: 20px; /* 标题与下方内容的间距 */
                            border-bottom: 2px solid #eee; /* 标题下方添加一条细线 */
                            padding-bottom: 10px; /* 标题与细线之间的间距 */
                        }
                        p {
                            font-size: 16px; /* 段落文字大小 */
                            color: #666; /* 段落文字颜色 */
                            margin-bottom: 20px; /* 段落之间的间距 */
                        }
                        .update-log {
                            margin-top: 20px;
                            list-style-type: none;
                            padding-left: 0;
                            border-left: 4px solid #007BFF; /* 左侧边框 */
                            padding-left: 20px; /* 增加左侧内边距以与边框对齐 */
                        }
                        .update-item {
                            margin-bottom: 10px;
                            background-color: #f8f9fa; /* 背景色 */
                            border-radius: 5px; /* 边框圆角 */
                            box-shadow: 0 2px 4px rgba(0,0,0,0.1); /* 阴影效果 */
                            padding: 10px; /* 内边距 */
                        }
                        .update-item strong {
                            color: #007BFF;
                            display: block; /* 强制标题换行显示 */
                        }
                        .update-item ul {
                            list-style-type: disc; /* 列表项前的标记样式 */
                            padding-left: 20px; /* 列表项的内边距 */
                        }
                        .update-item ul li {
                            color: #666; /* 列表项的文字颜色 */
                        }
                    </style>
                </head>
                <body>

                <h1>{{ email_log_model.email_day }} 每日推荐</h1>

                <p>欢迎探索最新推荐</p>

                <ul class="update-log">
                    {% for item in email_log_model.update_log %}
                    <li class="update-item">
                        <strong>{{ item.title }}</strong>
                        <p>{{ item.readme }}</p>
                        <ul>
                            {% for change in item.changes %}
                            <li>{{ change }}</li>
                            {% endfor %}
                        </ul>
                    </li>
                    {% endfor %}
                </ul>

                </body>
                </html>
                """

        self.error_report_template_str = """
                <!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <meta name="viewport" content="width=device-width, initial-scale=1.0">
                    <title>错误报告</title>
                    <style>
                        body {
                            font-family: Arial, sans-serif;
                            margin: 20px;
                            line-height: 1.6;
                            color: #333;
                            background-color: #f8d7da;
                        }
                        h1 {
                            color: #dc3545;
                            text-align: center;
                            margin-bottom: 20px;
                            border-bottom: 2px solid #eee;
                            padding-bottom: 10px;
                        }
                        .error-message {
                            font-size: 18px;
                            color: #721c24;
                            margin: 20px 0;
                            text-align: center;
                        }
                        .error-time {
                            font-size: 16px;
                            color: #6c757d;
                            text-align: center;
                        }
                        .details {
                            margin-top: 20px;
                            list-style-type: none;
                            padding-left: 0;
                            border-left: 4px solid #dc3545;
                            padding-left: 20px;
                        }
                        .details-item {
                            margin-bottom: 10px;
                            background-color: #fff;
                            border-radius: 5px;
                            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
                            padding: 10px;
                        }
                        .details-item strong {
                            color: #dc3545;
                            display: block;
                        }
                    </style>
                </head>
                <body>

                <h1>错误报告</h1>

                <p class="error-message">调用接口时发生错误：{{ error_message }}</p>
                <p class="error-time">错误发生时间：{{ error_time }}</p>

                <ul class="details">
                    {% for detail in error_details %}
                    <li class="details-item">
                        <strong>{{ detail.title }}</strong>
                        <p>{{ detail.description }}</p>
                    </li>
                    {% endfor %}
                </ul>

                </body>
                </html>
                """

    def generate_error_report_html(self, error_message, error_time, error_details):
        """
        生成错误报告的 HTML 内容

        :param error_message: 错误信息
        :param error_time: 错误发生时间
        :param error_details: 错误详细信息
        :return: HTML 格式的错误报告内容
        """
        template = Template(self.error_report_template_str)
        html_content = template.render(
            error_message=error_message,
            error_time=error_time,
            error_details=error_details
        )

        return html_content

    def generate_daily_recommendation_html(self, email_log_model):
        """
        生成每日推荐的 HTML 内容

        :param email_log_model: 包含每日推荐信息的模型
        :return: HTML 格式的每日推荐内容
        """
        template = Template(self.daily_recommendation_template_str)
        html_content = template.render(
            email_log_model=email_log_model
        )

        return html_content

# 示例用法
if __name__ == "__main__":
    report_generator = EmailReportGenerator()

    # 示例数据：每日推荐
    email_log_model = {
        "email_day": "2023-10-30",
        "update_log": [
            {"title": "推荐项目 A", "readme": "这是项目 A 的简要说明。", "changes": ["修复了 bug 1", "添加了新功能 1"]},
            {"title": "推荐项目 B", "readme": "这是项目 B 的简要说明。", "changes": ["改进了性能", "更新了文档"]}
        ]
    }

    # 生成每日推荐 HTML
    html_report = report_generator.generate_daily_recommendation_html(email_log_model)
    print(html_report)  # 打印生成的每日推荐 HTML

    # 示例数据：错误报告
    error_message = "无法连接到数据库"
    error_time = "2023-10-30 10:00:00"
    error_details = [
        {"title": "数据库连接错误", "description": "尝试连接数据库时发生超时."},
        {"title": "查询失败", "description": "无法执行SQL查询."}
    ]

    # 生成错误报告 HTML
    html_error_report = report_generator.generate_error_report_html(error_message, error_time, error_details)
    print(html_error_report)  # 打印生成的错误报告 HTML